Page Principale

Astuce SAP - Transaction SAP API

Transactions SAP

Transactions 👁‍🗹

Recueil de transaction SAP

Données Utilisateur

PARAMETERS
PARAMETERS permet Ă  l'utilisateur de rentrer une valeur dans le champ
PARAMETERS v_variable TYPE table-champs.

Le mot clef 'DEFAULT' permet de préremplir les données dans le champ
SELECT-OPTIONS: v_date FOR mara-ersda DEFAULT '20010101' TO '20011231'. --> ici on vient définir un ensemble de dates

SELECT-OPTIONS
Le SELECT-OPTIONS permet Ă  l'utilisateur de rentrer les valeurs et conditions qu'il souhaite
SELECT-OPTIONS: v_variable FOR table-champs.

RADIO BUTTON
Les RADIO BUTTON permettent à l'utilisateur de sélectionner une valeur parmi un ensemble
PARAMETERS rb_01 RADIOBUTTON GROUP rb_0 DEFAULT 'X' USER-COMMAND ucomm. " --> 'USER-COMMAND UCOMM' rend les Boutons Radio dynamiques au clic
PARAMETERS rb_02 RADIOBUTTON GROUP rb_0.

Les Bouttons Radio sont associés à un groupe pour savoir à qui ils sont liés.
Ils ont aussi un nom de variable pour définir si leur état est 'X' ou ' '.

Affichage

Onglets
Les Onglets permettent Ă  l'utilisateur de naviguer dans plusieurs pages de l'application

Initialisation des écrans pour les onglets
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN END OF SCREEN 100.

SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN END OF SCREEN 200.

SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
SELECTION-SCREEN END OF SCREEN 300.

Création des onglets dans un bloc
SELECTION-SCREEN: BEGIN OF TABBED BLOCK vb_onglets FOR 30 LINES,
TAB (20) tab0 USER-COMMAND ucomm_1 DEFAULT SCREEN 100,
TAB (20) tab1 USER-COMMAND ucomm_2 DEFAULT SCREEN 200,
TAB (20) tab2 USER-COMMAND ucomm_3 DEFAULT SCREEN 300,
END OF BLOCK vb_onglets.

Pour ajouter des éléments dans les onglets il faudra les mettre dans l'initialisation de l'écran voulu

Objet ALV
L'affichage ALV est la version améliorée du 'Write' :
- Il permet d'afficher sous forme de tableau des données
- Il peut aussi les trier et les organiser.


TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv)
CHANGING t_table = lt_mara ). " --> 't_table' est la table d'affichage du tableau ALV

lo_alv->get_functions( )->set_all( abap_true ).

DATA(lo_layout) = lo_alv->get_layout( ).

lo_layout->set_key( VALUE salv_s_layout_key( report = sy-repid ) ).
lo_layout->set_default( abap_true ).
lo_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
lo_alv->display( ).

CATCH cx_salv_msg.
CATCH cx_salv_not_found.
ENDTRY.

RequĂȘtes

SELECT I
Les SELECT permettent de faire des requĂȘtes dans une table pour en extraire des donnĂ©es


TABLES: mara.

"Déclaration du type --> Permet de créer un type de table avec différents champs
TYPES: BEGIN OF ty_mara,
nom TYPE aenam,
date TYPE ersda,
END OF ty_mara.

" DĂ©claration d'une entĂȘte du type de table [ls_mara] et de la variable de la table [lt_mara].
DATA: lt_mara TYPE TABLE OF ty_mara,
ls_mara TYPE ty_mara.

"Permet Ă  l'utilisateur de rentrer les valeurs et conditions qu'il souhaite
SELECT-OPTIONS: v_date FOR mara-ersda.
SELECT-OPTIONS: v_nom FOR mara-aenam.

" RequĂȘte des champs de la table
SELECT FROM mara
FIELDS aenam, ersda
WHERE ersda IN @v_date "AAAAMMJJ
AND aenam IN @v_nom
INTO TABLE @lt_mara.

"RĂ©cupĂ©ration des donnĂ©es de la requĂȘte
LOOP AT lt_mara INTO ls_mara.
WRITE: / ls_mara-nom, '--', ls_mara-date.
ENDLOOP.

SELECT II
Une autre façon de faire un SELECT, de façon dynamique cette fois.


SELECT from mara
FIELDS mandt,
matnr,
ernam,
mtart
into table @data(lt_mara).

LOOP AT lt_mara ASSIGNING FIELD-SYMBOL().
WRITE: /, -matnr.
ENDLOOP.

SELECT INNER JOIN --> Potentiellement ObsolĂšte (Voir syntaxe SELECT)
Les SELECT INNER JOIN permettent de faire des requĂȘtes dans plusieurs table pour en extraire des donnĂ©es avec un paramĂštre commun


TABLES: mara, bkpf.

SELECT a~aenam,
a~ersda,
b~bukrs
INTO TABLE @lt_table
FROM mara AS a
INNER JOIN bkpf AS b " --> les champs 'ersda' de la table 'mara' et 'bldat' de la table 'bkpf' contiennent des valeurs équivalentes, ce qui établit une relation entre les deux tables
ON a~ersda = b~bldat
WHERE a~ersda In @v_date
AND a~aenam In @v_nom.

SORT
SORT permet de trier une table interne par rapport Ă  une colonne.

" Trier la table par date
SORT lt_mara by date.

AT
Les AT sont des conditions qui permettent de passer dans le code à chaque changement de donnée de la colonne choisie ou d'une colonne qui la précÚde.

TABLES: mara.

"Déclaration du type --> Permet de créer un type de table avec différents champs
TYPES: BEGIN OF ty_mara,
date TYPE ersda,
nom TYPE aenam,
matiere TYPE wrkst,
END OF ty_mara.

" DĂ©claration d'une entĂȘte du type de table [ls_mara] et de la variable de la table [lt_mara].
DATA: lt_mara TYPE TABLE OF ty_mara,
ls_mara TYPE ty_mara.

"Permet Ă  l'utilisateur de rentrer les valeurs et conditions qu'il souhaite
SELECT-OPTIONS: v_date FOR mara-ersda.
SELECT-OPTIONS: v_nom FOR mara-aenam.

" RequĂȘte des champs de la table
SELECT FROM mara
FIELDS aenam, ersda
WHERE ersda IN @v_date "AAAAMMJJ
AND aenam IN @v_nom
INTO TABLE @lt_mara.

LOOP AT lt_mara ASSIGNING FIELD-SYMBOL(). " --> faire un field symbole

Ecrit dÚs qu'une date change (ou une de ses colonnes précédentes)
AT NEW date.
WRITE: /, -nom, '--', -date, '--', -matiere.
ENDAT.

Ecrit quand un groupe de date arrive va changer (ou une de ses colonnes précédentes)
AT END OF date.
WRITE: /, '------------------', /.
ENDAT.
ENDLOOP.

Variables

DATA [TYPE]
L'instruction 'DATA' permet de faire des variables qui stockent des données

DATA: variable_1 TYPE i,
variable_2 TYPE i,
variable_3 TYPE i.

DATA [TYPE REF TO]
L'instruction 'TYPE REF TO' permet de faire des pointeurs qui stockent la case mémoire d'une variable.
Elle va de paire avec l'instruction 'GET REFERENCE OF' qui permet de renseigner la case mémoire d'une variable.


DATA: lo_variable_1 TYPE REF TO i.
DATA: lo_variable_2 TYPE REF TO i.
DATA: lo_variable_3 TYPE REF TO i.

" Asignation des emplacement des variables
GET REFERENCE OF variable_1 INTO lo_variable_1.
GET REFERENCE OF variable_2 INTO lo_variable_2.
GET REFERENCE OF variable_3 INTO lo_variable_3.


Pour récuperer la valeur de la variable nous pouvons faire comme ceci :

x = variable_1.

Ou bien comme ceci :

x = lo_variable_1->*.


Il est également possible de changer le chemin d'un pointeur :

lo_variable_1->* = lo_variable_2->*.


--------------------------------------------------------------------------------------------------------

Voici un programme d'exemple réunissant les notions vues ci-dessus :

* ###############################################
* Déclaration des variables
* ###############################################
DATA: variable_1 TYPE i,
variable_2 TYPE i,
variable_3 TYPE i,
increment TYPE i.

DATA: it_table TYPE TABLE OF REF TO i."data.

DATA: lo_variable_1 TYPE REF TO i.
DATA: lo_variable_2 TYPE REF TO i.
DATA: lo_variable_3 TYPE REF TO i.

* ###############################################
* Asignation des emplacements de variables
* ###############################################
GET REFERENCE OF variable_1 INTO lo_variable_1.
GET REFERENCE OF variable_2 INTO lo_variable_2.
GET REFERENCE OF variable_3 INTO lo_variable_3.

variable_1 = 1.
variable_2 = 2.
variable_3 = 3.

" enregistrement de la valeur du chemin de la variable
APPEND lo_variable_1 TO it_table.
APPEND lo_variable_2 TO it_table.
APPEND lo_variable_3 TO it_table.

* ###############################################
* Code principale
* ###############################################
PERFORM afficher.

" traitement sur chemin variable
lo_variable_1->* = lo_variable_2->*.

PERFORM afficher.

" traitement sur chemin variable dans une table
increment = 1.
DO 2 TIMES.
TRY.
lo_variable_1 = it_table[ increment ]. " redéfinis le chemin d'accÚs de la variable
lo_variable_1->* = lo_variable_3->*. " modifie la valeur de la variable par son chemin d'accĂšs

CATCH cx_sy_itab_line_not_found.
WRITE 'erreur'.
ENDTRY.

increment = increment + 1.
ENDDO.

PERFORM afficher.

* ########################################################################################
FORM afficher.
WRITE: / |variable_1 = { variable_1 }|,
/ |variable_2 = { variable_2 }|,
/ |variable_3 = { variable_3 }|,
/ '‎'.
ENDFORM.

Sortie du programme :

variable_1 = 1
variable_2 = 2
variable_3 = 3

variable_1 = 2
variable_2 = 2
variable_3 = 3

variable_1 = 3
variable_2 = 3
variable_3 = 3

Concaténation
La concaténation permet d'assembler des données (texte / nombre) pour en faire une seule donnée texte.

DATA:
variable_final(70) TYPE c,
v_date(20) TYPE c,
v_nom(20) TYPE c,
v_age TYPE i.

variable_final = space. " 'SPACE' fait que le champ est vide, pareil pour ''
v_date = '31 Janvier 2024'.
v_nom = 'Joël'.
v_age = '22'.

" Concaténation
variable_final = |Le { v_date } { v_nom } à { v_age } ans.|. " Bien mettre les espaces au début et à la fin des accolades

WRITE variable_final.

Modifier Une table
Les modifications de tables permettent de modifier les données dans une table.

/!\ /!\ /!\ ON NE CHANGE QUE LES TABLES INTERNES /!\ /!\ /!\

Méthode 1
LOOP AT lt_mara INTO ls_mara.
ls_mara-nom = ''.
MODIFY lt_mara FROM ls_mara TRANSPORTING nom.
ENDLOOP.


Méthode 2
ls_mara-nom = ''.
MODIFY lt_mara FROM ls_mara TRANSPORTING nom WHERE nom IS NOT INITIAL.


Méthode 3
LOOP AT lt_mara ASSIGNING FIELD-SYMBOL(). Déclaration du FIELD-SYMBOL à la volée.
-nom = ''.
ENDLOOP.

FIELD-SYMBOLS
Le FIELD-SYMBOLS permet d'avoir une variable avec un type dyamique (texte / nombre / structure / ...).

DATA: w_name TYPE string VALUE `Valeur 1`,
w_index TYPE i VALUE 1.

FIELD-SYMBOLS <fs_test> TYPE any. " Déclaration pour tout les types standards

ASSIGN w_name TO <fs_test>. " Assigne le type de "w_name" au "FIELD-SYMBOLS"
PERFORM afficher.

<fs_test> = 'Valeur 2'. " Changes la valeur de <fs_test>
PERFORM afficher.

ASSIGN w_index TO <fs_test>. " Réassigne un nouveau type à <fs_test>, il est maintenant de type "i"
PERFORM afficher.

ADD 1 TO <fs_test>. " Incrémente la valeur de <fs_test>
PERFORM afficher.



FORM afficher.
WRITE: <fs_test>, /.
ENDFORM.

API

ZAPI_COSTCENTER_SRV 👁‍🗹

API SAP sur les COSTCENTER